# 步骤1：创建备份目录（幂等创建）
backup_directory_creation:  # 定义一个状态ID，用于创建备份目录
  file.directory:  # 指定使用file模块的directory功能来创建目录
    - name: /etc/yum.repos.d/bak  # 指定要创建的目录路径
    - makedirs: True  # 如果目录的上级目录不存在，则创建上级目录
    - user: root  # 指定目录的所有者
    - group: root  # 指定目录的所属组
    - mode: '755'  # 设置目录的权限为755
    - unless: test -d /etc/yum.repos.d/bak  # 如果/etc/yum.repos.d/bak目录已存在，则不执行此操作


# 步骤2：安全移动所有内容到备份目录（核心改进）
backup_existing_files:
  cmd.run:
    - name: |
        # 使用find精确处理所有内容（排除bak目录自身）  找到要备份的东西，进行备份
        find /etc/yum.repos.d/ -mindepth 1 -maxdepth 1 \
          ! -name 'bak' \
          -exec mv -t /etc/yum.repos.d/bak/ {} +
    - onchanges:
      - file: backup_directory_creation
    - onlyif: |
        # 精确检测需要备份的内容（排除bak目录）   如果找不到，则不执行
        find /etc/yum.repos.d/ -mindepth 1 -maxdepth 1 \
          ! -name 'bak' | grep -q .

# 步骤3：部署管理文件（保留备份目录）
deploy_managed_files:
  file.recurse:
    - name: /etc/yum.repos.d
    - source: salt://init/files/etc/yum.repos.d
    - user: root
    - group: root
    - dir_mode: '755'
    - file_mode: '644'
    - require:
      - cmd: backup_existing_files


# 步骤4：验证备份目录内容（可选）
verify_backup_contents:  # 定义一个状态ID，用于验证备份目录的内容
  cmd.run:  # 指定使用cmd模块的run功能来执行命令
    - name: ls -lR /etc/yum.repos.d/bak  # 执行ls -lR命令，递归列出/etc/yum.repos.d/bak目录下的所有文件和子目录
